#! /usr/bin/env python
# coding=utf-8

from Bio import SeqIO
import sys
import argparse

dis = '''
读取被repeatmask以后的基因组（被mask为N）
输出 N占比为 百分之 n 的序列
输出 长度小于 k 的序列
由大天才创建与2020年11月13日
示例命令 
find_repeat_and_short_scaf.py -f genome.fa.2.7.7.80.10.50.500.mask -n 90 -k 3000
v 0.1.1
'''


parser = argparse.ArgumentParser(description=dis)
parser.add_argument('-f', type=str, nargs='+',
    help='fasta文件') # 这里metavar指赋值的参数的说明 nargs 指只能给定一个

parser.add_argument('-n', type=float, nargs='+',
    help='N占比 cut-off 是百分数 例如 90') 

parser.add_argument('-c', type=float, nargs='+',
    help='长度为多少以下 需要检查N占比 默认为 10W ') 

parser.add_argument('-k', type=int, nargs='+',
    help='长度的 cut-off 值 小于某个固定值') 


# 获取参数
args = parser.parse_args()

if args.f == None:
    print('请给定fasta文件')
    parser.print_help()
    sys.exit()
else:
    infile = args.f[0]

if args.n == None:
    n = 0
else:
    n = float(args.n[0])

if args.k == None:
    k = 0
else:
    k = int(args.k[0])

if args.c == None:
    c = 100000
else:
    c = int(args.c[0])


for i in SeqIO.parse(infile,'fasta'):
    if len(i.seq) <= c and str(i.seq).upper().count('N')/len(i.seq) >= (n / 100.0):
        print(i.name)
    elif len(i.seq) <= k:
        print(i.name)

